var express = require("express");
var app = express();
var fs = require("fs");
var bodyParser = require("body-parser");
var bodyParserEnCode = bodyParser.urlencoded({extended:false});
var multer = require("multer");
var multiparty = require("multiparty");
var formidable = require("formidable");
var cookieParser = require("cookie-parser");
var util = require("util");
var mysql = require("mysql");
var syncMysqlUtil = require("./util/syncMysqlUtil.js");
var asyncMysqlUtil = require("./util/asyncMysqlUtil.js");

app.use(express.static("public"));
app.use(cookieParser());
var upload = multer({dest:'public/upload/'});  
// app.use(multer({dest:'/tmp/public/'}).array('image')); 

app.get("/index.html",function(req,res){
    res.sendFile(__dirname + "/index.html");
})

app.get("/",function(req,res){
    // res.sendFile(__dirname + "/public/index1.html");
    res.sendFile(__dirname + "/index.html");
})

// twilio 发送短信
app.get("/sms",function(req,res){
    const accountSid = 'AC1a6b53d7addc0b3d14b01bbdc33effa5';
    const authToken = '6f73c61e5c9f7580f7faccfca03739cf';
    const client = require('twilio')(accountSid, authToken);
    
    client.messages
    .create({
        body: 'Hello wjy!,我来自很久很久以前!',
            from: '+19802725168',
            to: '+8617621503621'
          })
          .then(message => console.log(message.sid))
          .done();

    res.send("twilio!");
})



//数据库链接
// var connection = mysql.createConnection({
//     host:"localhost",
//     user:"root",
//     password:"123456",
//     database:"test"
// });

// connection.connect();

// connection.query("SELECT 1",function(err,result,fields){
//     if (err) throw err;
//     console.log(result);
// })

// connection.end(function(err){
//     console.log("connection is end!");
// })

// 数据库连接池
var pool  = mysql.createPool({
    connectionLimit:10,
    user:"root",
    password:"root",
    database:"test"
})

var sqlSy1 = "SELECT * FROM user WHERE t_name = 'Tim';";
// console.log(sqlSy)
pool.getConnection(function(err,connection){
    // console.log(connection)
    connection.query(sqlSy1,function(err,rows){
        console.log(rows);
        // resolve(rows);
    })
    //关闭链接
    connection.release();
})




async function testTimeout(){
    return new Promise((resolve,rejected)=>{
        setTimeout(()=>{
            console.log("setTimeout!!!");
            resolve("延迟2秒执行!");
        },2000)

    })
}

// 新增数据
function insertSqlData(reqData){
   return new Promise(function(resolve,rejected){
        var sqlSy = "INSERT INTO lickrunoob2 (runoob_title,runoob_author) VALUES ("+mysql.escape(reqData)+",'Tim')";
        // console.log(sqlSy)
        pool.getConnection(function(err,connection){
            connection.query(sqlSy,function(err,rows){
                console.log(rows);
                resolve(rows);
            })
            //关闭链接
            connection.release();
        })
    })
}

// 删除数据
function deleteSqlData(reqData){
    return new Promise(function(resolve,rejected){
         var sqlSy = "DELETE from lickrunoob2 WHERE runoob_title="+mysql.escape(reqData)+"";
         // console.log(sqlSy)
         pool.getConnection(function(err,connection){
             connection.query(sqlSy,function(err,rows){
                 resolve(rows);
             })
             //关闭链接
             connection.release();
         })
     })
 }

// 修改数据
function updateSqlData(reqData){
    console.log(reqData);
    return new Promise(function(resolve,rejected){
         var sqlSy = "UPDATE user SET t_name ="+mysql.escape(reqData)+" WHERE id='1'";
         // console.log(sqlSy)
         pool.getConnection(function(err,connection){
             connection.query(sqlSy,function(err,rows){
                 resolve(rows);
             })
             //关闭链接
             connection.release();
         })
     })
 }

// 查询数据
function getSql(reqData){
   return new Promise(function(resolve,rejected){
        var sqlSy = "SELECT * FROM lickrunoob2 where runoob_title like "+mysql.escape(reqData);
        // console.log(sqlSy)
        pool.getConnection(function(err,connection){
            connection.query(sqlSy,function(err,rows){
                resolve(rows);
            })
            //关闭链接
            connection.release();
        })
    })
}

//封装同步sql   --查询数据语句
// app.get("/getData",function(req,res){
//     console.log(req.query.title)
//     syncMysqlUtil( "SELECT * FROM lickrunoob2 where runoob_title like "+mysql.escape(req.query.title),function (err,rows,fields) {
//         var sendData = {
//             errCode:"00000",
//             getData:rows
//         };
//         res.status(200).send(sendData);
//     })
// })

//封装异步sql   --查询数据语句
// app.get("/getData",function(req,res){
//     console.log(req.query.title)
//     asyncMysqlUtil( "SELECT * FROM lickrunoob2 where runoob_title like "+mysql.escape(req.query.title)).then((rows)=>{
//         var sendData = {
//             errCode:"00000",
//             getData:rows
//         };
//         res.status(200).send(sendData);
//     }).catch((err)=>{
//         var sendData = {
//             errCode:"00001",
//             getData:null
//         };
//         res.status(200).send(sendData);        
//     })
// })

//多个异步操作函数
async function allSql(reqData){
    try { 

        // var getSql1 =  getSql(reqData);
        // var testTimeout1 =  testTimeout();
        // var delayTime = await testTimeout1;
        // var ret = await getSql1;

        // var [delayTime,ret] = await Promise.all([testTimeout(),getSql(reqData)]); 

        // var ret = await insertSqlData(reqData);//新增
        // var ret = await deleteSqlData(reqData);//删除
        var ret = await updateSqlData(reqData);//修改
        // var ret = await getSql(reqData);//查询
        return ret;
    } catch (error) {
        return [];
    }
 }

app.get("/getData",function(req,res){
    console.log(req.query)
    console.log(req.query.title)
    var aPromise = allSql(req.query.title);
    aPromise.then((rows)=>{
        console.log(rows);
        var sendData = {
            errCode:"00000",
            getData:rows
        };
        console.log(sendData);
        res.status(200).send(sendData);
    })
})

app.post("/postData",bodyParserEnCode,function(req,res){
    console.log(req.body);
    res.send("Name="+ req.body.Name + "||||||Age=" + req.body.Age);
})

app.post("/uploadFile",upload.array("image"),function(req,res){
    res.status(200).send("上传成功！");
    // console.log(req.files);  //获取所有文件
    console.log(req.body.username)
    var allFiles = req.files;

    for (const key in allFiles) {
        var aFile = allFiles[key];
        var dp = aFile.destination + aFile.originalname;
        fs.rename(aFile.path,dp,function(err){
            console.log("上传事变")
        })
    }
})

//获取FormData数据
app.post('/ajaxUpload',upload.array('files1'),function(req,res){　
// 　　 console.log(req.body.username);//获取通过formData中表单的字段 name="username"的数据
　　　　//req.body ajax提交的非文件数据
　　　　//req.body.username //提交参数 username
　　　　//req.file.fieldname 上传文件 input file  name字段名称
　　　　//req.file.filename 上传文件 文件名
　　　　//req.file.originalname 上传文件 文件名
　　　　//req.file.mimetype 上传文件类型
　　　　//req.file.size 上传文件大小
　　　　//req.file.destination 上传文件存在的路径
　　　　//req.file.path 上传文件的 路径
　　　　console.log(req.files);
       var  sendData = {};
        for (const index in req.files) {
            var aFile = req.files[index];
            var dp = aFile.destination + aFile.originalname;
            sendData[aFile.path] = dp;
            fs.rename(aFile.path,dp,function(err){
                console.log("上传事变")
            })
        }
　　　　 res.send({msg:'上传成功',sendData});//返回数据到前端页面，可以将上传的图片，在前端预览。
});

//multiparty上传图片
app.post("/multipartyUploadImg",function(req,res){
    res.status(200).send("multiparty上传图片成功");

    var form = new multiparty.Form({
        uploadDir:"public/upload/"
    })
    form.encoding = 'utf-8';
    form.parse(req,function(err,fields,files){
        console.log(fields);
        console.log(fields.userName);
        console.log(files);
        fs.rename(files.image[0].path,"public/upload/"+files.image[0].originalFilename,function(err){
            console.log("multiparty上传图片改名字成功")
        })
    })
})

//formidable上传图片
app.post("/formidable",function(req,res){
    var form = new formidable.IncomingForm();
    form.uploadDir = "public/upload/";
    console.log("cookies:"+ util.inspect(req.cookies));
    form.parse(req,function(err,fields,files){
        console.log(fields)
        console.log(files)
        fs.rename(files.image.path,"public/upload/"+files.image.name,function(err){
            
        })
    })
    res.status(200).send("formidable上传图片成功");
})

// var io = require('socket.io').listen(app)
  
// io.set('log level', 1);//将socket.io中的debug信息关闭  
  
// io.sockets.on('connection', function (socket) {  
//     socket.emit('news', { hello: 'world' });  
//     socket.on('my other event', function (data) {  
//       console.log(data);  
//     });  
// });  

app.listen(8080,function(){
    console.log("server runing 8080");
});

